/**** written by abo --2025.7.23
* 串口数据解析驱动：IMU、视觉、无线串口OR蓝牙控制字
* 需开启串口全局中断以及DMA接收（normal BYTE），注意中断优先级分配，一般来说DMA中断优先级可以较低，串口中断优先级稍微高
*/
#include "uart_unpack.h"
#include "usart.h"
#include "string.h"


cmd_data_typedef cmd_data;



uint8_t CMD_RX_BUF[UART_RX_BUF_NUM];  //CMD控制命令串口接收缓冲数组


static void Get_CMD_Data(uint8_t* Buffer,uint32_t size);

/*串口接收空闲中断回调函数*/
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{

	if (huart== CMD_UART_HANDLER)  //CMD串口
	{

    	/*解析协议*/		
		Get_CMD_Data(CMD_RX_BUF,Size);
		/*缓冲清零*/
		 memset(CMD_RX_BUF, 0, Size);
	}


}





/*解析CMD指令*/
static void Get_CMD_Data(uint8_t* Buffer,uint32_t size)
{
	if(size !=CMD_DATA_SIZE)
		return;

	/*解析指令*/
	uint32_t i=0;
	for (i=0; i<size - (CMD_DATA_SIZE-1); i++)  //在缓冲区里找帧头帧尾
	{
		if(Buffer[i] == 0x21 && Buffer[i+CMD_DATA_SIZE-1] == 0x12) //帧头帧尾校验成功
		{
			cmd_data.value = Buffer[i+1];
			cmd_data.is_ok = 1;
			break;
		}
		
	}
}

